#ifndef GameLevel_H
#define GameLevel_H

#include <Ogre.h>

//#include "astar.h"
#include "GameObject.h"
#include "InputManager.h"
//#include "Character.h"
#include "GameState.h"

class GameLevel : public GameState {
public:
	GameLevel(void){ 
		//astarManager = new ASA();
	};
	~GameLevel(void){};

    virtual void enter( void )  = 0;
    virtual void exit( void )   = 0;

    virtual void pause( void )  = 0;
    virtual void resume( void ) = 0;
    virtual void update( unsigned long lTimeElapsed ) = 0;
    
    virtual void keyPressed( const OIS::KeyEvent &e )  = 0;
    virtual void keyReleased( const OIS::KeyEvent &e ) = 0;

    virtual void mouseMoved( const OIS::MouseEvent &e ) = 0;
    virtual void mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) = 0;

	void mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id );

	void getMeshInformation( const Ogre::MeshPtr mesh,
									size_t &vertex_count,
									Ogre::Vector3* &vertices,
									size_t &index_count,
									unsigned long* &indices,
									const Ogre::Vector3 &position,
									const Ogre::Quaternion &orient,
									const Ogre::Vector3 &scale );

	//ASA * getAstarManager() {
	//	return astarManager;
	//}
	Ogre::RaySceneQuery	*mRaySceneQuery;
private:
	//ASA* astarManager;

};
#endif